<?php
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// NOTICE OF COPYRIGHT                                                    //
//                                                                        //
// Dean`s Office for Moodle                                               //
// Электронный деканат                                                    //
// <http://deansoffice.ru/>                                               //
//                                                                        //
// Copyright (C) 2008-2999  Alex Djachenko (Алексей Дьяченко)             //
// alex-pub@my-site.ru                                                    //
// Copyright (C) 2008-2999  Evgenij Cigancov (Евгений Цыганцов)           //
// Copyright (C) 2008-2999  Ilia Smirnov (Илья Смирнов)                   // 
// Copyright (C) 2008-2999  Mariya Rojayskaya (Мария Рожайская)           // 
//                                                                        //
// This program is free software: you can redistribute it and/or modify   //
// it under the terms of the GNU General Public License as published by   //
// the Free Software Foundation, either version 3 of the Licensen.        //
//                                                                        //
// This program is distributed in the hope that it will be useful,        //
// but WITHOUT ANY WARRANTY; without even the implied warranty of         //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
// GNU General Public License for more details.                           //
//                                                                        //
// You should have received a copy of the GNU General Public License      //
// along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
//                                                                        //
////////////////////////////////////////////////////////////////////////////



// Подключаем библиотеки
require_once('lib.php');

// содключаем библиотеку форм
$DOF->modlib('widgets')->webform();

class dof_im_journal_order_fix_day_form extends dof_modlib_widgets_form
{
    /**
     * @var dof_control
     */
    protected $dof;
    
    function definition()
    {    
        // делаем глобальные переменные видимыми
        $this->dof    = $this->_customdata->dof;
        $departmentid = $this->_customdata->departmentid;
        // создаем ссылку на HTML_QuickForm
        $mform =& $this->_form;
        $mform->addElement('hidden','departmentid', $departmentid);
        $mform->setType('departmentid', PARAM_INT);
        //создаем заголовок формы
        $mform->addElement('header','formtitle', $this->dof->get_string('order_fix_day', 'journal'));
        $options = array();
        $options['startyear'] = dof_userdate(time()-10*365*24*3600,'%Y');
        $options['stopyear']  = dof_userdate(time()+10*365*24*3600,'%Y');
        $options['optional']  = false;
        $mform->addElement('date_selector', 'begindate', 
            $this->dof->get_string('date_fix_day_from', 'journal').':',$options);
        $mform->setType('begindate', PARAM_INT);
        $mform->addElement('date_selector', 'enddate', 
            $this->dof->get_string('date_fix_day_to', 'journal').':',$options);
        $mform->setType('enddate', PARAM_INT);
        
        $mform->addElement('date_time_selector', 'crondate', 
            $this->dof->get_string('date_execute_order','journal').':',$options);
                        // отчет
        $mform->addElement('select', 'reportid', $this->dof->get_string('age','cstreams').':', $this->get_list_reports());
        $mform->setType('reportid', PARAM_INT);
           
        $mform->addElement('submit', 'buttonview', $this->dof->get_string('button_order','journal'));
        // применение проверки ко всем элементам
        $mform->applyFilter('__ALL__', 'trim');
    }
    
    
    function definition_after_data()
    {
        $mform = $this->_form;
        // делаем значения по умолчанию
        $date = time();
        // формируем даты начала и конца месяца 
        $dateday = dof_usergetdate($date);
        $begintime = mktime(12,0,0,$dateday['mon'],1,$dateday['year']);
        $endtime = mktime(12,0,0,$dateday['mon'],30,$dateday['year']);
        $mform->setDefault('begindate', $begintime);
        $mform->setDefault('enddate', $endtime);
    }
    
    /** Возвращает массив периодов 
     * @return array список периодов, массив(id периода=>название)
     */
    private function get_list_reports()
    {
    	$params = new stdClass;
    	$params->departmentid = optional_param('departmentid', null, PARAM_INT);
        $params->plugintype = 'im';
        $params->plugincode = 'journal';
        $params->code       = 'loadteachers';
        $params->status     = 'completed';
        // получаем список доступных учебных периодов
    	$select = $this->dof->storage('reports')->get_select_listing($params);
    	$rez = $this->dof->storage('reports')->get_records_select($select);
        // преобразуем список записей в нужный для select-элемента формат  
    	$rez = $this->dof_get_select_values($rez, array(0=>$this->dof->get_string('out_correction', 'journal')), 'id', array('name'));
        // оставим в списке только те объекты, на использование которых есть право
        $permissions = array(array('plugintype'=>'storage', 'plugincode'=>'reports', 'code'=>'im_journal_loadteachers'));
        $rez = $this->dof_get_acl_filtered_list($rez, $permissions);
        return $rez;
    }
    
    public function process()
    {
        if ( $this->is_submitted() AND confirm_sesskey() AND $formdata = $this->get_data() )
        {
            $order = $this->dof->im('journal')->order('fix_day');
            // сохраняем новый приказ
            $orderobj = new object;
            if ( ! $personid = $this->dof->storage('persons')->get_by_moodleid_id() )
    		{// если id персоны не найден 
    			return false;
    		}
    		//сохраняем автора приказа
            $orderobj->ownerid = $personid;
            $orderobj->crondate = $formdata->crondate;
            if ( isset($formdata->departmentid) AND $formdata->departmentid )
            {// установим выбранное на странице id подразделения 
                $orderobj->departmentid = $formdata->departmentid;
            }else
            {// установим id подразделения из сведений о том кто формирует приказ
                $orderobj->departmentid = $this->dof->storage('persons')->get_field($personid,'departmentid');
            }
            
            //дата создания приказа
            $orderobj->date = time();
            //добавляем данные, о которых приказ
            $orderobj->data = new object;
            $orderobj->data->begindate = $formdata->begindate;
            $orderobj->data->enddate = $formdata->enddate;
            // сохраняем приказ в БД и привязываем экземпляр приказа к id
            
            $reportdata = new object();
            $reportdata->data = new object();
            $reportdata->begindate    = $formdata->begindate;
            $reportdata->enddate      = $formdata->enddate;
            $reportdata->crondate     = $formdata->crondate;
            $reportdata->personid     = $this->dof->storage('persons')->get_by_moodleid_id();
            $reportdata->departmentid = $formdata->departmentid;
            $reportdata->objectid     = $formdata->departmentid;
            $reportdata->data->forecast = 'true';
            $reportdata->data->reportid = $formdata->reportid;  
            $report = $this->dof->storage('reports')->report('im','journal', 'loadteachers');
            $report->save($reportdata);
            $orderobj->data->reportid = $report->get_id();
            $order->save($orderobj);
            $order->sign($personid);
        }
    }
    
}

?>